package com.chorye.datasource.service;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.chorye.datasource.entity.Student;
import com.chorye.datasource.dao.StudentMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 * 使用 @DS 切换数据源。
 *
 * @author Chorye
 * @DS 可以注解在方法上和类上，同时存在方法注解优先于类上注解。
 * 注解在service实现或mapper接口方法上，但强烈不建议同时在service和mapper注解。
 * @since 2018-12-13
 */
@Service
@DS("master")
public class StudentService extends ServiceImpl<StudentMapper, Student> {

    /**
     * 举一些常用API的--栗子, 更多的请自己探究
     * 如果需要自定义SQL，可以像平常一样自己定义接口方法和xml中的sql
     */
    public List<Student> example() {
        // baseMapper 就是当前实体泛型的mapper，无需重复注入
        // 单个插入操作，只会插入实体类中有值存在的字段
        baseMapper.insert(new Student());
        // 单个通过主键的修改操作，只会修改实体类中有值存在的字段
        baseMapper.updateById(new Student());
        // 单个通过主键的删除操作
        baseMapper.deleteById(new String());
        // 批量删除，把主键都放在一个String的List中就好了
        baseMapper.deleteBatchIds(new ArrayList<String>());
        // 批量保存，泛型就是实体类的类型了，后面的数量就是你要批量删除的数量，如果不指定，就是都删了
        saveBatch(new ArrayList<>(), 10);
        // 条件查询，QueryWrapper是一个条件对象，通过它的实例可以构造出很多的条件，最后传入selectList方法中就好
        QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
        // name = '小红'
        queryWrapper.eq("name", "小红");
        // name like '%小明%'
        queryWrapper.like("name", "小明");
        // name like '%小'
        queryWrapper.likeLeft("name", "小");
        // name like '明%'
        queryWrapper.likeRight("name", "明");
        // age between 1,3
        queryWrapper.between("age", 1, 3);
        // order by age, weight asc
        queryWrapper.orderByAsc("age", "weight");
        // order by age, weight desc
        queryWrapper.orderByDesc("age", "weight");
        // 如果需要查询所有记录请直接传入null
        return baseMapper.selectList(queryWrapper);
    }
}
